/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.beautycenter.DAO;

import br.com.beautycenter.bean.Cliente;
import br.com.beautycenter.bean.Prestacao;
import br.com.beautycenter.hibernateUtil.DaoBase;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.Query;

/**
 *
 * @author Magelinha
 */
public class PersistePrestacao extends DaoBase<Prestacao> { 
    public List<Prestacao> retornarPretacoes(){
        try {
            return findAll();
        } catch (Exception ex) {
            return new ArrayList<Prestacao>();
        }
    }
    
    public List<Prestacao> retornarPrestacoesAtivas(){
        Query query = getEntityManager().createQuery("FROM Prestacao p WHERE "
                + "p.confirmarRecebimento=:confirmar");
        query.setParameter("confirmar", false);
        
        try{
            return query.getResultList();
        }catch(Exception ex){
            return new ArrayList<Prestacao>();
        }
    }
    
    public List<Prestacao> retornarPrestacoesAtivasPorCliente(Cliente cliente){
        Query query = getEntityManager().createQuery("FROM Prestacao p WHERE "
                + "p.venda.cliente.idPessoa=:id AND p.confirmarRecebimento=:confirmar "
                + "ORDER BY p.venda,p.numeroPrestacao");
        query.setParameter("id", cliente.getIdPessoa());
        query.setParameter("confirmar", false);
        
        try{
            return query.getResultList();
        }catch(Exception ex){
            return new ArrayList<Prestacao>();
        }
    }
    
    public List<Prestacao> retornarPrestacoesPorCliente(Cliente cliente){
        Query query = getEntityManager().createQuery("FROM Prestacao p WHERE "
                + "p.venda.cliente.idPessoa=:id "
                + "ORDER BY p.venda,p.dataPagamento");
        query.setParameter("id", cliente.getIdPessoa());
        
        try{
            return query.getResultList();
        }catch(Exception ex){
            return new ArrayList<Prestacao>();
        }
    }
    
    /**
     * 
     * @param data
     * @param recebimentoExtra
     * @return 
     */
    public Double retornarSomatorioPrestacoesPagasPorData(Date data, boolean recebimentoExtra){
        Query query = getEntityManager().createQuery("SELECT SUM(p.valor) FROM Prestacao p WHERE "
                + " p.confirmarRecebimento=:confirmar AND p.dataPagamento=:data AND p.recebimentoExtra=:recebimento");
        query.setParameter("confirmar", true);
        query.setParameter("data", data);
        query.setParameter("recebimento", recebimentoExtra);
        
        try{
            return (Double)query.getSingleResult();
        }catch(Exception ex){
            return new Double(0.0);
        }
    }
    
    public void salvar(Prestacao prestacao){
        save(prestacao);
    }
    public void deletar(Prestacao prestacao){
        try{
            delete(prestacao);
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }
    
    public void atualizar(Prestacao prestacao){
        update(prestacao);
    }
}



